/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Archivo: 
 * Última Revision: $Rev: 64 $
 *      Fecha: $Date: 2011-09-18 02:32:49 +0000 (Sun, 18 Sep 2011) $
 */ 

package Manejo.Transporte.Registros;

import java.util.Random;
import java.util.Date;

import Archivador.Informador;

/**
 * Genera un numero de serie o ID único para cualquier objeto registrable.
 * 
 * @author Jorge Martinez
 * @author Jonathan Lopez
 */
public class GeneradorID
{
    private static int siguienteSerie = 1;
    private static final Random generador = new Random();
    
    /**
     * Reinicia la semilla del generador y obtiene del Informador el 
     * siguiente numero de serie.
     */
    static
    {
        Date hoy = new Date();
        generador.setSeed( hoy.getTime() );
        
        try
        {
            String datoSerie = Informador.obtenerDato( "indice" );
            siguienteSerie = Integer.parseInt( datoSerie );
        }
        catch( NumberFormatException e )
        {
            // TODO: Agregar una entrada al log
            // System.out.println("GeneradorID: No se pudo leer el indice del Informador." );
        }
    }
    
    /**
     * Genera el nuevo ID
     * @return objeto de tipo ID con un identificador único
     */
    public static ID nuevoID()
    {
        ID nuevoIdentificador = new ID( siguienteSerie, generador.nextInt() );
        
        ++siguienteSerie;
        // Avisar al informador que el número de índice ha cambiado
        Informador.cambiarDato( "indice" , Integer.toString(siguienteSerie) );
        
        return nuevoIdentificador;
    }
    
    
    
     /**
     * Punto de entrada para la prueba unitaria del GeneradorID
     * @param args 
     */
    public static void main( String [] args ){
        // Generar 10 identificadores nuevos
        ID[] identificadores = new ID[1000];
        for( ID id: identificadores ){
            id = GeneradorID.nuevoID();
            System.out.println(id);
        }
        
        Informador.guardarCambios();
    }
}
